#include "widget_20.h"
#include <QCameraInfo>

widget_20::widget_20(QWidget *parent) : QWidget(parent)
{
    // 初始化摄像头（默认使用系统默认摄像头）
        camera = new QCamera(QCameraInfo::defaultCamera(), this);
        // 初始化视频显示控件
        viewfinder = new QCameraViewfinder(this);
        // 初始化图像捕捉（用于截图等功能）
        imageCapture = new QCameraImageCapture(camera, this);
    
        // 初始化控制按钮
        startButton = new QPushButton("启动摄像头", this);
        startButton->setFixedHeight(30);
    
        // 设置布局
        layout = new QVBoxLayout(this);
        layout->addWidget(viewfinder);    // 添加视频显示区域
        layout->addWidget(startButton);   // 添加控制按钮
        setLayout(layout);
    
        // 将摄像头输出绑定到显示控件
        camera->setViewfinder(viewfinder);
    
        // 连接按钮信号
            connect(startButton, &QPushButton::clicked, this, &widget_20::toggleCamera);
            // 连接摄像头状态变化信号
            connect(camera, &QCamera::stateChanged, this, [this]() {
                emit cameraStateChanged(); // 转发状态变化信号
            });
}

widget_20::~widget_20()
{
    // 释放资源
    delete camera;
    delete viewfinder;
    delete imageCapture;
    delete startButton;
    // 布局由父对象自动释放，无需手动删除
}

// 实现：公共接口 - 获取摄像头状态
QCamera::State widget_20::getCameraState() const
{
    return camera->state();
}

// 实现：公共接口 - 切换摄像头状态
void widget_20::publicToggleCamera()
{
    toggleCamera(); // 调用私有槽函数
}

// 切换摄像头启动/停止状态
void widget_20::toggleCamera()
{
    if (camera->state() == QCamera::ActiveState) {
        // 摄像头正在运行：停止并更新按钮文本
        camera->stop();
        startButton->setText("启动摄像头");
    } else {
        // 摄像头未运行：启动并更新按钮文本
        camera->start();
        startButton->setText("停止摄像头");
    }
}
